Интеграция через backend
Используйте собственный backend или BFF, если покупка, заказ или подписка в Gigma открывает закрытые данные и функции вашего продукта.
Frontend отвечает за интерфейс. Gigma хранит клиента, заказ, оплату и подписку. Ваш backend связывает эти данные с локальным пользователем и принимает окончательное решение о доступе.
Когда backend обязателен
Backend нужен, если ваш продукт:
- хранит собственные закрытые данные;
- выдаёт платную функцию после покупки;
- должен скрыть Bearer клиента от браузера;
- обрабатывает webhooks;
- связывает одного клиента Gigma с локальным пользователем.
Публичный каталог, тарифы, страницы, блоки и меню можно получать напрямую из клиентского приложения по App Token. Личные методы Gigma доступны по Bearer клиента, но решение о доступе к вашим данным не должно приниматься на frontend.
Как разделена ответственность
| Компонент | За что отвечает |
|---|---|
| Gigma | вход клиента, профиль, каталог, заказ, платёж и подписка |
| Backend или BFF | локальная сессия, связь с пользователем, проверка доступа, закрытые данные |
| Frontend | ввод и отображение состояния; не является источником истины об оплате |
Рекомендуемая схема:
Браузер
│ HttpOnly cookie локальной сессии
▼
Backend / BFF продукта
│ App Token + Bearer клиента
▼
Gigma API Порядок интеграции
Шаг 1. Получите Bearer клиента
Проведите выбранный сценарий входа клиента через backend. После успешного входа Gigma вернёт Bearer.
Сохраните Bearer на сервере и свяжите его с локальным пользователем. Не отправляйте его обратно в браузер, если в этом нет технической необходимости.
Шаг 2. Создайте локальную сессию
После входа выдайте браузеру cookie вашей сессии. Используйте:
HttpOnly, чтобы JavaScript не мог прочитать cookie;Secure, чтобы браузер передавал её только по HTTPS;SameSite, подходящий вашей доменной схеме;- ограниченный срок действия и отзыв при выходе.
Bearer клиента не должен попадать в URL, browser storage, аналитику и обычные application-логи.
Шаг 3. Обращайтесь к Gigma от имени клиента
В запросах backend передавайте оба заголовка:
GET /api/counterparty/orders HTTP/1.1
Host: api.gigma.ru
Token: <application_token>
Authorization: Bearer <counterparty_token>
Accept: application/json App Token выбирает Application, Bearer подтверждает клиента.
Шаг 4. Проверьте право доступа
Обычный заказ
- Получите заказ через
GET /api/counterparty/orders/{id}. - Убедитесь, что заказ относится к текущему клиенту и текущему
Application. Gigma дополнительно проверяет эту связь. - Разрешайте действие только для заранее определённого оплаченного статуса.
- Не доверяйте
payment_link, query-параметрам страницы возврата и данным с frontend.
Подписка
Получите GET /api/counterparty/subscriptions, найдите нужный тариф и сначала проверьте, что оплаченный период ещё не закончился:
subscription.current_period_end > now После этого примените одно правило продукта:
- закрывать доступ сразу после отключения автопродления — разрешайте только
status == "active"; - сохранять доступ до конца оплаченного периода — разрешайте
active,chargingиcanceled, покаcurrent_period_endнаходится в будущем.
past_due не даёт доступ: оплаченный период уже закончился. Не определяйте право только по latest_payment.status.
Проверяйте состояние перед защищённым действием, а не только при входе пользователя. Полное описание статусов и вариантов правила находится в разделе «Подписки».
Шаг 5. Обрабатывайте изменения состояния
Webhook order.paid помогает быстро обновить локальное состояние, но не является единственным доказательством оплаты.
Обработчик webhook должен:
- проверить
X-Signatureпо исходному телу запроса и секрету webhook, привязанному к нужномуApplication; - сохранить
event_idкак ключ идемпотентности и не обрабатывать событие повторно; - повторно получить заказ или подписку из Gigma;
- обновить локальное право только по актуальному ответу API.
Настройка webhooks описана в разделе «Платформа / Приложения».
Шаг 6. Завершайте обе сессии
При выходе пользователя:
- вызовите
POST /api/counterparty/logout; - удалите локальную сессию;
- очистите серверное хранилище Bearer;
- отзовите все устройства, если пользователь выбрал общий выход.
Готово: браузер работает только с локальной сессией, а backend проверяет актуальное состояние в Gigma перед выдачей доступа.
Introspect: когда он нужен
Introspect нужен, когда Bearer пришёл вашему backend из другой доверенной системы и его необходимо проверить отдельными client_id и client_secret.
В обычном BFF-сценарии backend сам получил Bearer от Gigma и может использовать его напрямую. Дополнительный introspect не требуется.
Heartbeat: что он подтверждает
Heartbeat обновляет время активности клиентской сессии. Он не подтверждает оплату, подписку или право на закрытую функцию.
Не используйте активную сессию как правило доступа.
Ошибки и повторы
| Код | Что делать |
|---|---|
401 | удалите локальную сессию или проведите вход заново; не запускайте бесконечный refresh |
403 | клиент опознан, но действие запрещено правилом доступа |
409 | сначала получите текущее состояние и только потом повторяйте изменение |
422 | исправьте данные или бизнес-условие; автоматический повтор не поможет |
429 | дождитесь времени из Retry-After |
5xx или сетевой сбой | считайте результат неизвестным и сначала выполните безопасное чтение состояния |
Общие правила ответов и повторов находятся в соглашениях API.
Карта интеграции
| Задача | Раздел |
|---|---|
Создать Application и получить App Token | Подготовка приложения |
| Получить Bearer клиента | Вход клиента |
| Получить профиль клиента | Профиль клиента |
| Получить товары и цены | Каталог и цены |
| Получить подписочные тарифы | Каталог тарифов |
| Создать покупку и проверить состояние | Заказы, оплаты и подписки |
| Учитывать активное время | Heartbeat |
| Проверить Bearer из другой системы | Introspect |